%{
#include<stdio.h>
#include"sintatico_SimpleLogo.tab.h"

int numeroLinha = 1;
%}

quebra_linha      [\n]
espaco_em_branco	 [ \t]+
inteiro      [0-9]+  
variavel     $[A-Za-z][A-Za-z0-9]*
comentario   "#"[^\n]*"\n"
turnleft     turnleft
turnright    turnright
go           go
gox	     gox
goy	     goy
penwidth     penwidth
if_          "if"
for_         "for"
wait_	     "wait"
reset_       "reset"
direction    "direction"
repeat_       "repeat"
while_        "while"
penup        "penup"
pendown      "pendown"
to           "to"
abre_cha     "{"
fecha_cha     "}"
abre_par      "("
fecha_par     ")"
virgula       ","
true_	      "true"
false_        "false"
op_maior     ">"
op_menor     "<"
op_igual     "="
op_mais      "+"
op_menos     "-"
op_vezes     "*"
op_div       "/"
op_and       "and"
op_or        "or"
forward      "forward"
backward     "backward"
write_       "write"
frase        \"[^\n]*\"
%%
{write_}               {return write_;}
{frase}			{strcpy(yylval.identificador, yytext);return frase;}
{backward}             {return backward;}
{quebra_linha}        {numeroLinha = numeroLinha+1;}
{forward}             {return forward;}
{op_maior}	     {return op_maior;}    
{op_menor}    	     	     {return op_menor;}
{op_igual}    	     	     {return op_igual;}
{op_mais}     	     	     {return op_mais;}
{op_menos}    	     	     {return op_menos;}
{op_vezes}    	     	     {return op_vezes;}
{op_div}      	     	     {return op_div;}
{op_and}      	     	     {return op_and;}
{op_or}       	     	     {return op_or;}
{true_}	     	     {strcpy(yylval.identificador, "True") ; return true_;}
{false_}	     {strcpy(yylval.identificador,"False"); return false_;}
{espaco_em_branco}   {}
{virgula}	     {return virgula;}
{to}		     {return to_;}
{abre_cha}	     {return abre_cha;}
{fecha_cha}	     {return fecha_cha;}
{abre_par}	     {return abre_par;}
{fecha_par}	     {return fecha_par;}
{variavel}	     {strcpy(yylval.identificador, yytext);return variavel;}
{inteiro}            {strcpy(yylval.identificador,yytext);return inteiro;}
{comentario} 	     {}
{if_}                {return if_;}
{repeat_}      	     {return repeat_;}
{for_}	             {return for_;}
{wait_}              {return wait_;}
{while_}	     {return while_;}
{turnleft}           {return turnleft;}
{turnright}   	     {return turnright;}
{direction}    	     {return direction;}
{go}         	     {return go;}
{gox}        	     {return gox;}  
{goy}        	     {return goy;}  
{reset_}	     {return reset;}
{penup}        	     {return penup;}
{pendown}      	     {return pendown;}
{penwidth}   	     {return penwidth;}
.	     	     {printf("Erro na compilacao - analise lexica - linha: %d- caractere desconhecido %s\n",numeroLinha, yytext);}

%%

